perm filename HASH.LST[S1,ALS] blob
sn#419040 filedate 1979-02-18 generic text, type T, neo UTF8
PASCAL COMPILATION LIST PRODUCED BY PASCAL VERSION FROM 30-DEC-76 ON 18-FEB-79 AT 09:58:36
10 COMMENT VALID 00004 PAGES
20 C REC PAGE DESCRIPTION
30 C00001 00001
40 C00002 00002 (*PROGRAM HEADER PAGE*)
50 C00005 00003 PROGRAM PRINTHASH (INPUT,OUTPUT)
60 C00008 00004 FUNCTION OPC_HASH (VAR MNEM : CHAR4) : INTEGER
70 C00015 ENDMK
80 C;
90 (*PROGRAM HEADER PAGE*)
100
110 (*PAS10 OPTIONS*) (*$D+,R32,S1300*) (*X10S1*)
120
130 (* DEFAULT
140
150 D+ DEBUG AND POSTMORTEM DUMP -
160 E+ EXTERNAL CALLS TO LEVEL 1 PROCEDURES ALLOWED -
170 FN FILE OPTION 1
180 I+ FORTRAN I/O IN EXTERNAL FORTRAN SUBROUTINES -
190 L+ OBJECT LISTING -
200 RN SIZE OF LOW-SEGMENT (SEE PAS10 MANUAL)
210 SN MAX INSTRUCTIONS PER STATEMENT 1000
220 T+ RUNTIME CHECK +
230 U+ 72 COLUMN FORMAT -
240 XN HIGHEST REGISTER FOR PARAMETERS 6
250 *)
260
270 (*SLAC PCPASC OPTIONS*) (* B+,D+,M-*)
280
290 (* DEFAULT
300
310 A+ GENERATE 370 OBJECT MODULE -
320 A- GENERATE 370 ASSEMBLY MODULE
330 B+ BOUNDS CHECKING, BUT ALLOW 'BIG' CHARACTERS -
340 C+ EMIT PCODE +
350 D+ RUNTIME CHECKING OF POINTER, INDEX, SUBRANGE VALUES -
360 E+ FILE IS IN EBCDIC CHARACTER SET -
370 F+ SAVE FPR'S ON PROCEDURE/FUNCTION ENTRY +
380 K+ ENABLE STATEMENT EXECUTION COUNTING -
390 L+ LIST SOURCE PROGRAM +
400 M+ 72 COLUMN FORMAT +
410 P+ DOUBLE-WORD BOUNDARY ALIGNMENT -
420 S+ SAVE GPR'S ON PROCEDURE/FUNCTION ENTRY +
430 T+ PRINT SYMBOL TABLES (FOR POST-PROCESSOR) -
440 U+ GET STATISTICS?? 2ND PARAMETER TO PCODE BGN INSTR. -
450 V+ ?? 3RD PCODE BGN INSTRUCTION PARAMETER -
460 X+ USE ACTUAL PROCEDURE NAMES FOR EXTERNAL REFERENCES -
470 X- GENERATE UNIQUE 8-CHAR NAMES FOR EXTERNAL REFERENCES
480 *)
490
500 (*S1 PCPASC OPTION DIFFERENCES*) (* A+,B+,D+,L-,M120*) (*X10S1*)
510
520
530
540 (* DEFAULT
550
560 A+ GENERATE S1 ASSEMBLY MODULE -
570 A- GENERATE S1 OBJECT MODULE
580 *)
590
600 (* SLAC/PDP-10 TRANSPORT DEPENDENCIES FLAGGED WITH "XSL10" *)
610 (* PDP-10/S-1 TRANSPORT DEPENDENCIES FLAGGED WITH "X10S1" *)
620 PROGRAM PRINTHASH (INPUT,OUTPUT);
630
640 CONST
650 (*OPCHTSIZE = 197;
660 OPCHTSIZEM1 = 196;*)
670 OPCHTSIZE = 223;
680 OPCHTSIZEM1 = 222;
690 (*OPCHTSIZE = 239;
700 OPCHTSIZEM1 = 238;*)
710 MAX = 2000000;
720
730 TYPE
740 CHAR4 = PACKED ARRAY [1..4] OF CHAR;
750 U_OPCODE = ( U ,
760 UABS , UADD , UAND , UBGN , UCHKF, UCHKH, UCHKL, UCHKN,
770 UCHKT, UCHR , UCLAB, UCOMM, UCSP , UCUP , UDEAD, UDEC ,
780 UDEF , UDIF , UDIV , UDMD , UDOA , UDUP , UEND , UENT ,
790 UEQU , UFJP , UFLO , UFLT , UGEQ , UGRT , UIEQU, UIGEQ,
800 UIGRT, UILEQ, UILES, UINC , UIND , UINEQ, UINN , UINT ,
810 UIOR , UIXA , ULAB , ULCA , ULDA , ULDC , ULEQ , ULES ,
820 ULEX , ULIVE, ULOC , ULOD , UMDEF, UMOD , UMOV , UMPY ,
830 UMST , UMUS , UNEG , UNEQ , UNEW , UNOT , UNSTR, UODD ,
840 UORD , UOPTN, UPAR , UPLOD, UPSTR, URET , USGS , USQR ,
850 USTO , USTP , USTR , USUB , USWP , USYM , UTJP , UTRC ,
860 UTYP , UUJP , UUNI , UUNK , UXJP );
870
880 VAR
890 I : 0..OPCHTSIZEM1;
900 H : 0..OPCHTSIZEM1;
910 J : INTEGER;
920 K : INTEGER;
930 M1,M2,M3,M4 : INTEGER;
940 OPC : U_OPCODE;
950 MNEM : CHAR4; (*7FEB79 ALS*)
960
970 OPCHASHTAB : ARRAY [0..OPCHTSIZEM1] OF
980 RECORD
990 OPCNAM : CHAR4;
1000 OPC : U_OPCODE;
1010 HIT : INTEGER
1020 END (*OPCHASHTAB*);
1030
1040 FUNCTION OPC_HASH (VAR MNEM : CHAR4) : INTEGER;
1050 BEGIN
1060 OPC_HASH :=(((ORD(MNEM[1])*M1 + ORD(MNEM[2]))*M2 + ORD(MNEM[3]))*M3
1070 +ORD(MNEM[4])*M4) MOD OPCHTSIZE;
1080 (* OPC_HASH := (ORD(MNEM[1])*507 + ORD(MNEM[2])*26 + ORD(MNEM[3])
1090 +ORD(MNEM[4])*31) MOD OPCHTSIZE; *)
1100 (* OPC_HASH := (ORD(MNEM[1])*1024 + ORD(MNEM[2])*16 + ORD(MNEM[3])*2
1110 +ORD(MNEM[4])*32) MOD OPCHTSIZE; *)
1120 END (*OPC_HASH*);
1130
1140 PROCEDURE ENTER_OPC (NAM : CHAR4; OPC : U_OPCODE);
1150 VAR H : 0..OPCHTSIZEM1;
1160 BEGIN
1170 H := OPC_HASH(NAM);
1180 WHILE OPCHASHTAB[H].OPCNAM <> ' ' DO
1190 BEGIN
1200 H := (H + 1) MOD OPCHTSIZE;
1210 J := J + 1;
1220 END;
1230 OPCHASHTAB[H].OPCNAM := NAM;
1240 OPCHASHTAB[H].OPC := OPC;
1250 (* OPCHASHTAB[H].HIT := K; *)
1260 END (*ENTER_OPC*);
1270
1280 PROCEDURE PRINT_OPC;
1290 VAR H : 0..OPCHTSIZEM1;
1300 BEGIN
1310 WRITELN;
1320 FOR H := 0 TO OPCHTSIZEM1 DO
1330 BEGIN
1340 WRITE (OUTPUT,H,' ');
1350 IF OPCHASHTAB[H].OPCNAM = ' ' THEN WRITELN ELSE
1360 BEGIN
1370 WRITELN (OUTPUT,OPCHASHTAB[H].OPCNAM,OPCHASHTAB[H].OPC);
1380 (* IF OPCHASHTAB[H].HIT = 0 THEN WRITELN ELSE
1390 WRITELN (OUTPUT,OPCHASHTAB[H].HIT); *)
1400 END;
1410 END;
1420 END;
1430
1440 BEGIN (*MAIN PROGRAM*)
1450 K := 1000;
1460 M1 :=128;
1470 WHILE M1 <= MAX DO
1480 BEGIN (* WHILE M1 <= N *)
1490 M2 := 1;
1500 WHILE M1 * M2 <= MAX DO
1510 BEGIN
1520 M3 := 1;
1530 WHILE M1 * M2 * M3 <= MAX DO
1540 BEGIN
1550 M4 := 1;
1560 WHILE ((M1 * M2 * M3 * M4 <= MAX) AND (M4 < 8)) DO
1570 BEGIN
1580
1590 FOR I := 0 TO OPCHTSIZEM1 DO
1600 OPCHASHTAB[I].OPCNAM := ' ';
1610 J := 0;
1620 ENTER_OPC ('ABS ', UABS); ENTER_OPC ('ADD ', UADD);
1630 ENTER_OPC ('AND ', UAND); ENTER_OPC ('BGN ', UBGN);
1640 ENTER_OPC ('CHKF', UCHKF); ENTER_OPC ('CHKH', UCHKH);
1650 ENTER_OPC ('CHKL', UCHKL); ENTER_OPC ('CHKN', UCHKN);
1660 ENTER_OPC ('CHKT', UCHKT); ENTER_OPC ('CHR ', UCHR);
1670 ENTER_OPC ('CLAB', UCLAB); ENTER_OPC ('COMM', UCOMM);
1680 ENTER_OPC ('CSP ', UCSP); ENTER_OPC ('CUP ', UCUP);
1690 ENTER_OPC ('DEAD', UDEAD); ENTER_OPC ('DEC ', UDEC);
1700 ENTER_OPC ('DEF ', UDEF); ENTER_OPC ('DIF ', UDIF);
1710 ENTER_OPC ('DIV ', UDIV); ENTER_OPC ('DMD ', UDMD);
1720 ENTER_OPC ('DOA ', UDOA); ENTER_OPC ('DUP ', UDUP);
1730 ENTER_OPC ('END ', UEND); ENTER_OPC ('ENT ', UENT);
1740 ENTER_OPC ('EQU ', UEQU); ENTER_OPC ('FJP ', UFJP);
1750 ENTER_OPC ('FLO ', UFLO); ENTER_OPC ('FLT ', UFLT);
1760 ENTER_OPC ('GEQ ', UGEQ); ENTER_OPC ('GRT ', UGRT);
1770 ENTER_OPC ('IEQU', UIEQU); ENTER_OPC ('IGEQ', UIGEQ);
1780 ENTER_OPC ('IGRT', UIGRT); ENTER_OPC ('ILEQ', UILEQ);
1790 ENTER_OPC ('ILES', UILES); ENTER_OPC ('INC ', UINC);
1800 ENTER_OPC ('IND ', UIND); ENTER_OPC ('INEQ', UINEQ);
1810 ENTER_OPC ('INN ', UINN); ENTER_OPC ('INT ', UINT);
1820 ENTER_OPC ('IOR ', UIOR); ENTER_OPC ('IXA ', UIXA);
1830 ENTER_OPC ('LAB ', ULAB); ENTER_OPC ('LCA ', ULCA);
1840 ENTER_OPC ('LDA ', ULDA); ENTER_OPC ('LDC ', ULDC);
1850 ENTER_OPC ('LEQ ', ULEQ); ENTER_OPC ('LES ', ULES);
1860 ENTER_OPC ('LEX ', ULEX); ENTER_OPC ('LIVE', ULIVE);
1870 ENTER_OPC ('LOC ', ULOC); ENTER_OPC ('LOD ', ULOD);
1880 ENTER_OPC ('MDEF', UMDEF); ENTER_OPC ('MOD ', UMOD);
1890 ENTER_OPC ('MOV ', UMOV); ENTER_OPC ('MPY ', UMPY);
1900 ENTER_OPC ('MST ', UMST); ENTER_OPC ('MUS ', UMUS);
1910 ENTER_OPC ('NEG ', UNEG); ENTER_OPC ('NEQ ', UNEQ);
1920 ENTER_OPC ('NEW ', UNEW); ENTER_OPC ('NOT ', UNOT);
1930 ENTER_OPC ('NSTR', UNSTR); ENTER_OPC ('ODD ', UODD);
1940 ENTER_OPC ('ORD ', UORD); ENTER_OPC ('OPTN', UOPTN);
1950 ENTER_OPC ('PAR ', UPAR); ENTER_OPC ('PLOD', UPLOD);
1960 ENTER_OPC ('PSTR', UPSTR); ENTER_OPC ('RET ', URET);
1970 ENTER_OPC ('SGS ', USGS); ENTER_OPC ('SQR ', USQR);
1980 ENTER_OPC ('STO ', USTO); ENTER_OPC ('STP ', USTP);
1990 ENTER_OPC ('STR ', USTR); ENTER_OPC ('SUB ', USUB);
2000 ENTER_OPC ('SWP ', USWP); ENTER_OPC ('SYM ', USYM);
2010 ENTER_OPC ('TJP ', UTJP); ENTER_OPC ('TRC ', UTRC);
2020 ENTER_OPC ('TYP ', UTYP); ENTER_OPC ('UJP ', UUJP);
2030 ENTER_OPC ('UNI ', UUNI); ENTER_OPC ('UNK ', UUNK);
2040 ENTER_OPC ('XJP ', UXJP);
2050
2060 IF J < K THEN
2070 BEGIN
2080 K := J;
2090 WRITELN (OUTPUT,M1,M2,M3,M4,K,' HITS');
2100 IF K = 0 THEN PRINT_OPC;
2110 END; (* IF J < K THEN *)
2120 M4 := M4*2;
2130 END; (* WHILE M4 <= M3 DO *)
2140 M3 := M3*2;
2150 END; (* WHILE M3 <= M2 DO *)
2160 M2 := M2*2;
2170 END; (* WHILE M2 <= M1 *)
2180 M1 := M1+1;
2190 END; (* WHILE M1 < N *)
2200 END.
0 ERROR(S) DETECTED
HIGHSEG: 2K + 274 WORD(S)
LOWSEG : 0K + 775 WORD(S)
RUNTIME: 0: 1. 80